package cn.lizemin.feignclient;

import cn.lizemin.entity.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author lzm
 * @version 1.0
 * @description: 调用商品服务接口，（相当于restTemplate的升级）
 * @date 2022/3/1 15:19
 */
@FeignClient(value="PRODUCT") //value: 用来书写调用服务服务id
public interface ProductClient {
    /**
     * 调用商品服务
     * @return
     */
    @GetMapping("/product")
    String product();

    /**
     * 查询商品列表
     * @return
     */
    @GetMapping("/list")
    String list();

    /**
     * 使用非restful风格的url来进行传参，即http://localhost?name=lzm&age=28
     */
    @GetMapping("/test")
    String test(@RequestParam("name") String name, @RequestParam("age") Integer age);

    /**
     * 声明调用商品服务中test1接口 通过路径传递数据（restful风格）
     */
    @GetMapping("/test1/{id}/{name}")
    String test1(@PathVariable("id") Integer id, @PathVariable("name") String name);

    /**
     * 声明调用商品服务中test2接口 传递一个商品对象
     * @param product
     * @return
     */
    @PostMapping(value = "/test2")
    String test2(@RequestBody Product product);

    /**
     * 声明调用商品服务中test3接口 传递一个数组类型 queryString /test3?ids=21&ids=22
     * @param ids
     * @return
     */
    @GetMapping("/test3")
    String test3(@RequestParam("ids") String[] ids);

    /**
     * 声明调用商品服务中test4接口 传递一个list集合类型参数 test4?ids=21&ids=22
     * @param ids
     * @return
     */
    @GetMapping("/test4")
    String test4(@RequestParam("ids") String[] ids);

    /**
     * 声明调用根据id查询商品信息接口
     * @param id
     * @return
     */
    @GetMapping("/product/{id}")
    Product product(@PathVariable("id") Integer id);

    /**
     * 声明调用商品服务根据类别id查询一组商品信息的接口
     * @param categoryId
     * @return
     */
    @GetMapping("/products")
    List<Product> findByCategoryId(@RequestParam("categoryId") Integer categoryId);

    /**
     * 声明调用商品服务根据类别id查询分页查询商品信息 以及总条数
     * @param page
     * @param rows
     * @param categoryId
     * @return json字符串，然后自己将其解析成对象
     */
    @GetMapping("/productList")
    String findByCategoryIdAndPage(@RequestParam("page") Integer page,@RequestParam("rows") Integer rows,@RequestParam("categoryId") Integer categoryId);

}
